package net.zjitc.linearlist.impl;

import net.zjitc.linearlist.MyLinearList;


import java.lang.reflect.Array;
/**
 * Created by Administrator on 2017/3/2.
 */
public class SeqList<E> implements MyLinearList<E>{
    /*顺序表的最大容量*/
    private int maxsize;
    /*定义一个数组*/
    private E[]data;
    /*定义一个索引*/
    private int size;
    //    添加元素：
    /*初始化*/
    public SeqList(Class<E> type,int maxsize){
        this.maxsize=maxsize;
        data= (E[]) Array.newInstance(type,maxsize);
        size=0;
        this.maxsize=maxsize;
    }
    @Override
    public void add(E item) {
    ///*判断空间是否够用*/
        if (size>=data.length){
            throw new RuntimeException("您的下标已越界");
        }
       data[size++]=item;
    }
    //    插入元素：
    @Override
    public boolean add(int i, E item) {
    if (i<0||i>size){
        throw new IndexOutOfBoundsException("下标越界");
    }
    if (!isFull()){
        for (int j=size-1;j>=i;j--){
            data[j+1]=data[j];
        }
        data[i]=item;
        size++;
        return true;
    }else{
        return false;
    }
    }
    //    删除元素：
    @Override
    public E remove(int i) {
        reangeCheck(i);
        if (!isEmpty()){
            E oldValue=data[i];
            for (int j=i;j<size-1;j++){
                data[j]=data[j+1];
            }
            data[--size]=null;
        }
            return null;
    }
    public void reangeCheck(int i){
        if (i<0||i>size){
            throw  new IndexOutOfBoundsException("下标越界");
        }
    }
    //    定位元素：
    @Override
    public int indexOf(E item) {
        if (item==null) {
            for (int i = 0; i < size; i++)
                if (data[i] == null)
                    return i;
        }else{
                    for (int i=0;i<size;i++)
                        if (item.equals(data[i]))
                            return i;

                }
        return -1;
        }


    //    取表元素：
    @Override
    public E get(int i) {
        reangeCheck(i);
        return data[i];
    }
    //    修改元素：
    @Override
    public void edit(int i, E item) {

    }
    //    求元素个数：
    @Override
    public int getSize() {
        return size;
    }
    //    清空元素：
    @Override
    public void clear() {
        for (int i=0;i<size;i++)
            data[i]=null;
        size=0;
    }
    //    判断表是否为空：
    @Override
    public boolean isEmpty() {
        return size==0;
    }
    public boolean isFull(){
        if (size==maxsize){
            return true;
        }else {
            return false;
        }
    }
}
